package com.example.studyrecord;

import lombok.extern.slf4j.Slf4j;

/**
 * @author: yxh
 * @Description: 测试对象加载顺序
 * @Date: Created in 2022/8/19 09:58
 * @Modified By:
 */
@Slf4j
class Parent{
    static String name = "hello";
    //    private String ce;
    {
        System.out.println("parent block");
    }
    static {
        System.out.println("parent static block");
    }
    public Parent(){
        System.out.println("parent constructor");
    }
//    public Parent(String ce){
//        this.ce = ce;
//        System.out.println("parent constructor");
//    }
}

class Child extends Parent{
    static String childName = "hello";
    {
        System.out.println("child block");
    }
    static {
        System.out.println("child static block");
    }
    public Child(){
//        super("zho");
        System.out.println("child constructor");
    }
}
/**
 * 1.执行父类静态块
 * 2.执行子类静态块
 * 3.执行父类非静态块
 * 4.执行父类构造方法
 * 5.执行子类非静态块
 * 6.执行子类构造方法
 *  **** 子类的构造方法，不管这个构造方法带不带参数，默认的它都会先去寻找父类的不带参数的构造方法。
 *  *** 如果父类没有不带参数的构造方法，那么子类必须用supper关键子来调用父类带参数的构造方法，否则编译不能通过。
 */
public class TestObjectLoad {
    public static void main(String[] args) {
        new Child();
    }
}
